package ParserXML;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import org.jdom.Attribute;
import org.jdom.Content;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

import EntitiesDTO.FacturaDTO;
import EntitiesDTO.ItemFacturaDTO;
import EntitiesDTO.RodamientoDTO;

public class ReaderXML {

	private ReaderXML() {

	}

	private static ReaderXML instance;

	public static ReaderXML getInstance() {
		if (instance == null) {
			instance = new ReaderXML();
		}
		return instance;
	}

	private Element getRaiz(String xmlFile) {
		SAXBuilder builder = new SAXBuilder(false);
		Reader in = new StringReader(xmlFile);
		Document doc = new Document();
		try {
			doc = builder.build(in);
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Element raiz = doc.getRootElement();
		return raiz;
	}

	private Element getRaiz(File xmlFile) {
		SAXBuilder builder = new SAXBuilder(false);
		Document doc = new Document();
		try {
			doc = builder.build(xmlFile);
		} catch (JDOMException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		Element raiz = doc.getRootElement();
		return raiz;
	}

	

	// -----------------------------------------
	// recibir informacion de nuevo articulo (1)
	// -----------------------------------------

	@SuppressWarnings( { "unchecked", "deprecation" })
	public FacturaDTO getFacturaDTO(String xmlFile) {

		Element raiz = this.getRaiz(xmlFile);
		FacturaDTO factura = new FacturaDTO();

		Attribute idFactura = raiz.getAttribute("nroFactura");
		Attribute fechaEmision = raiz.getAttribute("fechaEmision");
		Attribute preciototal = raiz.getAttribute("precioTotal");
		Attribute subtotal = raiz.getAttribute("subTotal");
		Attribute iva = raiz.getAttribute("precioIva");
		Attribute tipofactura = raiz.getAttribute("tipoFactura");

		factura.setIdFactura(new Integer(idFactura.getValue()));
		factura.setFechaEmision(new Date(fechaEmision.getValue()));
		factura.setTotal(new Double(preciototal.getValue()));
		factura.setSubtotal(new Double(subtotal.getValue()));
		factura.setIva(new Double(iva.getValue()));
		factura.setTipofactura(tipofactura.getValue());
		factura.setItemsFactura(new Vector<ItemFacturaDTO>());

		List elementos = raiz.getChildren("itemFactura");

		for (int i = 0; i < elementos.size(); i++) {
			if (elementos.get(i) instanceof Element) {
				Element item = (Element) elementos.get(i);
				List<Content> cont = item.getContent();
				ItemFacturaDTO itemC = new ItemFacturaDTO();

				for (Content con : cont) {

					if (con instanceof Element) {
						Element el = (Element) con;
						if (el.getName() == "idRodamiento") {
							RodamientoDTO rodam = new RodamientoDTO();
							rodam.setCodigo(el.getValue());
							itemC.setRodamiento(rodam);
						}
						if (el.getName() == "cantidad") {
							itemC.setCantidad(new Integer(el.getValue()));
						}
						if (el.getName() == "precioUnitario") {
							itemC.setPrecioUnitario(new Double(el.getValue()));
						}
						if (el.getName() == "precioFinal") {
							itemC.setPrecioTotal(new Double(el.getValue()));
						}
					}
				}
				List<ItemFacturaDTO> lista = factura.getItemsFactura();
				lista.add(itemC);
				factura.setItemsFactura(lista);
			}
		}

		return factura;
	}
}
